try {
  doSomethingThatMightThrow();
} catch (e) {
  doSomethingBeforeRethrow();
  throw e;
}

try {
  doSomethingThatMightThrow();
} catch (e) {
  handleError(e);
}

try {
  doSomethingThatMightThrow();
} finally {
  cleanUp();
};

try {
  foo();
} catch (err) {
  console.error(err);
};

try {
  foo();
} catch (err) {
  console.error(err);
} finally {
  bar();
};

try {
  foo();
} catch (err) {
  doSomethingBeforeRethrow();
  throw err;
};

try {
  foo();
} catch (err) {
  throw err.msg;
};

try {
  foo();
} catch (err) {
  throw new Error("whoops!");
};

try {
  foo();
} catch (err) {
  throw bar;
};

try {
  foo();
} catch (err) { };
try {
  foo();
} catch ({ err }) {
  throw err;
};

try {
  foo();
} catch ([ err ]) {
  throw err;
};

async () => {
  try {
    await doSomething();
  } catch (e) {
    doSomethingAfterCatch();
    throw e;
  }
};

try {
  throw new Error('foo');
} catch {
  throw new Error('foo');
}